package com.xingchi.tornado.security.service;

import org.springframework.security.core.Authentication;

/**
 * 登录类型服务接口
 *
 * @author xiaoya
 * @date 2025/7/21 16:51
 */
public interface LoginTypeService {

    /**
     * 获取登录类型名称
     *
     * @return 登录类型名称
     */
    String getName();

    /**
     * 获取登录类型编码
     *
     * @return 登录类型编码
     */
    Integer getCode();

    /**
     * 获取登录类型对应的认证类
     *
     * @return 登录类型对应的认证类
     */
    Class<? extends Authentication> getAuthenticationClass();

    default boolean supports(Integer code) {
        return this.getCode().equals(code);
    }

    static <T extends Authentication> LoginTypeService build(String name, Integer code, Class<T> authenticationClass) {
        return new LoginTypeService() {

            @Override
            public String getName() {
                return name;
            }

            @Override
            public Integer getCode() {
                return code;
            }

            @Override
            public Class<T> getAuthenticationClass() {
                return authenticationClass;
            }
        };
    }
}
